package com.cn.server.scanner;

import java.util.HashMap;
import java.util.Map;

/**
 * 命令执行器管理者
 *
 * @author -jiawuwei-
 */
public class InvokerHoler {

    /**
     * 命令调用器
     */
    //Map<platform,Map<module,Map<cmd,Invoker>>>
    private static Map<Short, Map<Short, Map<Short, Invoker>>> invokers = new HashMap<>();

    /**
     * 添加命令调用
     *
     * @param module
     * @param cmd
     * @param invoker
     */
    public static void addInvoker(short platform, short module, short cmd, Invoker invoker) {
        Map<Short, Map<Short, Invoker>> moduleMap = invokers.get(platform);
        Map<Short, Invoker> cmdMap = null;
        if (moduleMap != null) {
            cmdMap = moduleMap.get(module);
            if (cmdMap != null) {
                Invoker invoker1 = cmdMap.get(cmd);
                if (invoker1 == null) {
                    cmdMap.put(cmd, invoker);
                }
            } else {
                cmdMap = new HashMap<Short, Invoker>();
                cmdMap.put(cmd, invoker);
                moduleMap.put(module, cmdMap);
            }

        } else {
            moduleMap = new HashMap<Short, Map<Short, Invoker>>();
            cmdMap = new HashMap<Short, Invoker>();
            cmdMap.put(cmd, invoker);
            moduleMap.put(module, cmdMap);
            invokers.put(platform, moduleMap);

        }

    }


    /**
     * 获取执行器
     *
     * @param module
     * @param cmd
     * @param invoker
     */
    public static Invoker getInvoker(short platform, short module, short cmd) {
        Map<Short, Map<Short, Invoker>> shortMapMap = invokers.get(platform);
        if (shortMapMap != null) {
            Map<Short, Invoker> map = shortMapMap.get(module);
            if (map != null) {
                return map.get(cmd);
            }
        }
        return null;
    }

}
